//
//  Problem937.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/22.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 937. 重新排列日志文件 【字符串排序】
 给你一个日志数组 logs。每条日志都是以空格分隔的字串，其第一个字为字母与数字混合的 标识符 。

 有两种不同类型的日志：
     字母日志：除标识符之外，所有字均由小写字母组成
     数字日志：除标识符之外，所有字均由数字组成
 请按下述规则将日志重新排序：
     所有 字母日志 都排在 数字日志 之前。
     字母日志 在内容不同时，忽略标识符后，按内容字母顺序排序；在内容相同时，按标识符排序。
     数字日志 应该保留原来的相对顺序。
     返回日志的最终顺序。

 示例 1：
     输入：logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
     输出：["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
     解释：
     字母日志的内容都不同，所以顺序为 "art can", "art zero", "own kit dig" 。
     数字日志保留原来的相对顺序 "dig1 8 1 5 1", "dig2 3 6" 。
 示例 2：
     输入：logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
     输出：["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
 提示：
     1 <= logs.length <= 100
     3 <= logs[i].length <= 100
     logs[i] 中，字与字之间都用 单个 空格分隔
     题目数据保证 logs[i] 都有一个标识符，并且在标识符之后至少存在一个字
 */
@objcMembers class Problem937: NSObject {
    func solution() {
        print(reorderLogFiles(["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]))
        print(reorderLogFiles(["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]))
        print(reorderLogFiles(["1 n u", "r 527", "j 893", "6 14", "6 82"]))
        
    }
    
    /*
     排序：字符串的排序
     */
    func reorderLogFiles(_ logs: [String]) -> [String] {
        var sortLogs = logs
        sortLogs.sort { (str1, str2) -> Bool in
            let array1 = str1.split(separator: " ", maxSplits: 1, omittingEmptySubsequences: true)
            let array2 = str2.split(separator: " ", maxSplits: 1, omittingEmptySubsequences: true)
            
            let charts01 = Array(array1[1])
            let charts11 = Array(array2[1])
            
            
            let isDig1 = charts01[0].isNumber
            let isDig2 = charts11[0].isNumber
            
            
            // 第一种判断
            /*
            if isDig1 == true && isDig2 == true {
                return false
            } else if isDig1 == true {
                return false
            } else if isDig2 == true {
                return true
            } else {
                if array1[1] == array2[1] {
                    return array1[0] < array2[0]
                } else {
                    return array1[1] < array2[1]
                }
            }
            */
            // 优化判断
            if isDig1 == false && isDig2 == false {     // 都是字母
                if array1[1] != array2[1] {             // 这里没有变化
                    return array1[1] < array2[1]
                } else {
                    return array1[0] < array2[0]
                }
            }
            return isDig1 == true ? false : true

            
        }
        return sortLogs
    }
    
    
}
